#include <my_header.h>
// 在发送大文件的时候, 客户端有可能在发送的时候提前终止, 这会导致发送端/写端(send)因为抛出SIGPIPE导致进程终止. 

/* Usage:  */
// 给客户端回传文件
// 参数：用来和指定客户端通信的socket的文件描述符
int sendFile(int net_fd)
{
    // 读取文件名的长度 和文件名
    char file_name[60] = { 0 };
    int name_len;

    // 接收要发送的文件名
    recv(net_fd, &name_len, sizeof(int), MSG_WAITALL);
    recv(net_fd, file_name, name_len, MSG_WAITALL);
    // 打开文件
    int file_fd =  open(file_name, O_RDONLY);
    // 读取文件内容 发给客户端
    while(1)
    {
        char buf[4096] = {0};
        int len = read(file_fd, buf, sizeof(buf));
        printf("len :%d \n", len);

        // 隔1s发送一次文件数据
        sleep(1);
        if(len == 0)
        {
            // 发送完毕,文件已读完
            break;
        }
        int res_send1 = send(net_fd, &len, sizeof(int), MSG_NOSIGNAL);
        if(res_send1 == -1)
        {
            printf("对端断开连接\n");
            break;
        }
        int res_send2 = send(net_fd, buf, len, MSG_NOSIGNAL);
        if(res_send2 == -1)
        {
            printf("对端断开连接\n");
            break;
        }
    }
    close(file_fd);
    return 0;
}


